package com.schoolcloud.common.util;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.schoolcloud.common.model.PageDTO;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class PageUtil<T> extends PageDTO<T> {
    public static <VO, PO> PageDTO<VO> of(PageDTO<PO> p, Class<VO> clazz) {
        return of(p, po -> BeanUtil.copyProperties(po, clazz));
    }

    /**
     * 将PO对象列表转换成VO对象列表
     *
     * @param p       查询结果
     * @param convert 转换函数：例如 user->{BeanUtil.copyToList(xxx)},也可以手动处理复杂的转换
     * @return {@link PageDTO}<{@link VO}>
     */
    public static <VO, PO> PageDTO<VO> of(PageDTO<PO> p, Function<PO, VO> convert) {
        PageDTO<VO> dto = new PageDTO<>();
        dto.setPageNum(p.getPageNum());
        dto.setTotal(p.getTotal());
        List<PO> records = p.getList();
        if (CollUtil.isEmpty(records)) {
            return dto;
        }
        List<VO> collect = records.stream().map(convert).collect(Collectors.toList());
        dto.setList(collect);
        return dto;
    }
}
